60806040523480156200001157600080fd5b506040518060400160405280600581526020017f42556e66740000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42554e000000000000000000000000000000000000000000000000000000000081525081600090816200008f91906200032c565b508060019081620000a191906200032c565b505050600160078190555062000413565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200013457607f821691505b6020821081036200014a5762000149620000ec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000175565b620001c0868362000175565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200020d620002076200020184620001d8565b620001e2565b620001d8565b9050919050565b6000819050919050565b6200022983620001ec565b62000241620002388262000214565b84845462000182565b825550505050565b600090565b6200025862000249565b620002658184846200021e565b505050565b5b818110156200028d57620002816000826200024e565b6001810190506200026b565b5050565b601f821115620002dc57620002a68162000150565b620002b18462000165565b81016020851015620002c1578190505b620002d9620002d08562000165565b8301826200026a565b50505b505050565b600082821c905092915050565b60006200030160001984600802620002e1565b1980831691505092915050565b60006200031c8383620002ee565b9150826002028217905092915050565b6200033782620000b2565b67ffffffffffffffff811115620003535762000352620000bd565b5b6200035f82546200011b565b6200036c82828562000291565b600060209050601f831160018114620003a457600084156200038f578287015190505b6200039b85826200030e565b8655506200040b565b601f198416620003b48662000150565b60005b82811015620003de57848901518255600182019150602085019450602081019050620003b7565b86831015620003fe5784890151620003fa601f891682620002ee565b8355505b6001600288020188555050505b505050505050565b6123c080620004236000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063e985e9c5146102a7578063eacabe14146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611818565b610307565b6040516101169190611860565b60405180910390f35b610127610368565b604051610134919061190b565b60405180910390f35b61015760048036038101906101529190611963565b6103fa565b60405161016491906119d1565b60405180910390f35b61018760048036038101906101829190611a18565b610416565b005b6101a3600480360381019061019e9190611a58565b61042c565b005b6101bf60048036038101906101ba9190611a58565b61052e565b005b6101db60048036038101906101d69190611963565b61054e565b6040516101e891906119d1565b60405180910390f35b61020b60048036038101906102069190611aab565b610560565b6040516102189190611ae7565b60405180910390f35b61022961061a565b604051610236919061190b565b60405180910390f35b61025960048036038101906102549190611b2e565b6106ac565b005b61027560048036038101906102709190611ca3565b6106c2565b005b610291600480360381019061028c9190611963565b6106df565b60405161029e919061190b565b60405180910390f35b6102c160048036038101906102bc9190611d26565b6107f2565b6040516102ce9190611860565b60405180910390f35b6102f160048036038101906102ec9190611e07565b610886565b6040516102fe9190611ae7565b60405180910390f35b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103615750610360826108c4565b5b9050919050565b60606000805461037790611e92565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390611e92565b80156103f05780601f106103c5576101008083540402835291602001916103f0565b820191906000526020600020905b8154815290600101906020018083116103d357829003601f168201915b5050505050905090565b6000610405826109a6565b5061040f82610a2e565b9050919050565b6104288282610423610a6b565b610a73565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361049e5760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161049591906119d1565b60405180910390fd5b60006104b283836104ad610a6b565b610a85565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610528578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161051f93929190611ec3565b60405180910390fd5b50505050565b610549838383604051806020016040528060008152506106c2565b505050565b6000610559826109a6565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105d35760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016105ca91906119d1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461062990611e92565b80601f016020809104026020016040519081016040528092919081815260200182805461065590611e92565b80156106a25780601f10610677576101008083540402835291602001916106a2565b820191906000526020600020905b81548152906001019060200180831161068557829003601f168201915b5050505050905090565b6106be6106b7610a6b565b8383610c9f565b5050565b6106cd84848461042c565b6106d984848484610e0e565b50505050565b60606106ea826109a6565b50600060066000848152602001908152602001600020805461070b90611e92565b80601f016020809104026020016040519081016040528092919081815260200182805461073790611e92565b80156107845780601f1061075957610100808354040283529160200191610784565b820191906000526020600020905b81548152906001019060200180831161076757829003601f168201915b505050505090506000610795610fc5565b905060008151036107aa5781925050506107ed565b6000825111156107df5780826040516020016107c7929190611f36565b604051602081830303815290604052925050506107ed565b6107e884610fdc565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806007549050600760008154809291906108a190611f89565b91905055506108b08482611045565b6108ba818461113e565b8091505092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061099f575061099e8261119a565b5b9050919050565b6000806109b283611204565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a2557826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610a1c9190611ae7565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610a808383836001611241565b505050565b600080610a9184611204565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ad357610ad2818486611406565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b6457610b15600085600080611241565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610be7576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1057816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610d0791906119d1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e019190611860565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610fbf578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610e52610a6b565b8685856040518563ffffffff1660e01b8152600401610e749493929190612026565b6020604051808303816000875af1925050508015610eb057506040513d601f19601f82011682018060405250810190610ead9190612087565b60015b610f34573d8060008114610ee0576040519150601f19603f3d011682016040523d82523d6000602084013e610ee5565b606091505b506000815103610f2c57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f2391906119d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610fbd57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fb491906119d1565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b6060610fe7826109a6565b506000610ff2610fc5565b90506000815111611012576040518060200160405280600081525061103d565b8061101c846114ca565b60405160200161102d929190611f36565b6040516020818303038152906040525b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110b75760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110ae91906119d1565b60405180910390fd5b60006110c583836000610a85565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111395760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161113091906119d1565b60405180910390fd5b505050565b8060066000848152602001908152602001600020908161115e9190612260565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161118e9190611ae7565b60405180910390a15050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061127a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156113ae57600061128a846109a6565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112f557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611308575061130681846107f2565b155b1561134a57826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161134191906119d1565b60405180910390fd5b81156113ac57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611411838383611598565b6114c557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361148657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161147d9190611ae7565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016114bc929190612332565b60405180910390fd5b505050565b6060600060016114d984611659565b01905060008167ffffffffffffffff8111156114f8576114f7611b78565b5b6040519080825280601f01601f19166020018201604052801561152a5781602001600182028036833780820191505090505b509050600082602001820190505b60011561158d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816115815761158061235b565b5b04945060008503611538575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561165057508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611611575061161084846107f2565b5b8061164f57508273ffffffffffffffffffffffffffffffffffffffff1661163783610a2e565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106116b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816116ad576116ac61235b565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106116f4576d04ee2d6d415b85acef810000000083816116ea576116e961235b565b5b0492506020810190505b662386f26fc10000831061172357662386f26fc1000083816117195761171861235b565b5b0492506010810190505b6305f5e100831061174c576305f5e10083816117425761174161235b565b5b0492506008810190505b61271083106117715761271083816117675761176661235b565b5b0492506004810190505b60648310611794576064838161178a5761178961235b565b5b0492506002810190505b600a83106117a3576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117f5816117c0565b811461180057600080fd5b50565b600081359050611812816117ec565b92915050565b60006020828403121561182e5761182d6117b6565b5b600061183c84828501611803565b91505092915050565b60008115159050919050565b61185a81611845565b82525050565b60006020820190506118756000830184611851565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156118b557808201518184015260208101905061189a565b60008484015250505050565b6000601f19601f8301169050919050565b60006118dd8261187b565b6118e78185611886565b93506118f7818560208601611897565b611900816118c1565b840191505092915050565b6000602082019050818103600083015261192581846118d2565b905092915050565b6000819050919050565b6119408161192d565b811461194b57600080fd5b50565b60008135905061195d81611937565b92915050565b600060208284031215611979576119786117b6565b5b60006119878482850161194e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119bb82611990565b9050919050565b6119cb816119b0565b82525050565b60006020820190506119e660008301846119c2565b92915050565b6119f5816119b0565b8114611a0057600080fd5b50565b600081359050611a12816119ec565b92915050565b60008060408385031215611a2f57611a2e6117b6565b5b6000611a3d85828601611a03565b9250506020611a4e8582860161194e565b9150509250929050565b600080600060608486031215611a7157611a706117b6565b5b6000611a7f86828701611a03565b9350506020611a9086828701611a03565b9250506040611aa18682870161194e565b9150509250925092565b600060208284031215611ac157611ac06117b6565b5b6000611acf84828501611a03565b91505092915050565b611ae18161192d565b82525050565b6000602082019050611afc6000830184611ad8565b92915050565b611b0b81611845565b8114611b1657600080fd5b50565b600081359050611b2881611b02565b92915050565b60008060408385031215611b4557611b446117b6565b5b6000611b5385828601611a03565b9250506020611b6485828601611b19565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611bb0826118c1565b810181811067ffffffffffffffff82111715611bcf57611bce611b78565b5b80604052505050565b6000611be26117ac565b9050611bee8282611ba7565b919050565b600067ffffffffffffffff821115611c0e57611c0d611b78565b5b611c17826118c1565b9050602081019050919050565b82818337600083830152505050565b6000611c46611c4184611bf3565b611bd8565b905082815260208101848484011115611c6257611c61611b73565b5b611c6d848285611c24565b509392505050565b600082601f830112611c8a57611c89611b6e565b5b8135611c9a848260208601611c33565b91505092915050565b60008060008060808587031215611cbd57611cbc6117b6565b5b6000611ccb87828801611a03565b9450506020611cdc87828801611a03565b9350506040611ced8782880161194e565b925050606085013567ffffffffffffffff811115611d0e57611d0d6117bb565b5b611d1a87828801611c75565b91505092959194509250565b60008060408385031215611d3d57611d3c6117b6565b5b6000611d4b85828601611a03565b9250506020611d5c85828601611a03565b9150509250929050565b600067ffffffffffffffff821115611d8157611d80611b78565b5b611d8a826118c1565b9050602081019050919050565b6000611daa611da584611d66565b611bd8565b905082815260208101848484011115611dc657611dc5611b73565b5b611dd1848285611c24565b509392505050565b600082601f830112611dee57611ded611b6e565b5b8135611dfe848260208601611d97565b91505092915050565b60008060408385031215611e1e57611e1d6117b6565b5b6000611e2c85828601611a03565b925050602083013567ffffffffffffffff811115611e4d57611e4c6117bb565b5b611e5985828601611dd9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611eaa57607f821691505b602082108103611ebd57611ebc611e63565b5b50919050565b6000606082019050611ed860008301866119c2565b611ee56020830185611ad8565b611ef260408301846119c2565b949350505050565b600081905092915050565b6000611f108261187b565b611f1a8185611efa565b9350611f2a818560208601611897565b80840191505092915050565b6000611f428285611f05565b9150611f4e8284611f05565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f948261192d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fc657611fc5611f5a565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000611ff882611fd1565b6120028185611fdc565b9350612012818560208601611897565b61201b816118c1565b840191505092915050565b600060808201905061203b60008301876119c2565b61204860208301866119c2565b6120556040830185611ad8565b81810360608301526120678184611fed565b905095945050505050565b600081519050612081816117ec565b92915050565b60006020828403121561209d5761209c6117b6565b5b60006120ab84828501612072565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120d9565b61212086836120d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061215d6121586121538461192d565b612138565b61192d565b9050919050565b6000819050919050565b61217783612142565b61218b61218382612164565b8484546120e6565b825550505050565b600090565b6121a0612193565b6121ab81848461216e565b505050565b5b818110156121cf576121c4600082612198565b6001810190506121b1565b5050565b601f821115612214576121e5816120b4565b6121ee846120c9565b810160208510156121fd578190505b612211612209856120c9565b8301826121b0565b50505b505050565b600082821c905092915050565b600061223760001984600802612219565b1980831691505092915050565b60006122508383612226565b9150826002028217905092915050565b6122698261187b565b67ffffffffffffffff81111561228257612281611b78565b5b61228c8254611e92565b6122978282856121d3565b600060209050601f8311600181146122ca57600084156122b8578287015190505b6122c28582612244565b86555061232a565b601f1984166122d8866120b4565b60005b82811015612300578489015182556001820191506020850194506020810190506122db565b8683101561231d5784890151612319601f891682612226565b8355505b6001600288020188555050505b505050505050565b600060408201905061234760008301856119c2565b6123546020830184611ad8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea26469706673582212203d86ccc076f1ee6c04639296dfd768bb567260aa13fd356a4954ea6c3cb99f3664736f6c63430008180033