60806040523480156200001157600080fd5b506040518060400160405280600881526020017f4f6c64546f6b656e0000000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4f4c445f544f4b454e000000000000000000000000000000000000000000000081525081600390816200008f919062000601565b508060049081620000a1919062000601565b505050620000c4336d04ee2d6d415b85acef8100000000620000ca60201b60201c565b6200081f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200013f5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200013691906200072d565b60405180910390fd5b62000153600083836200015760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001ad578060026000828254620001a0919062000779565b9250508190555062000283565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200023c578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200023393929190620007c5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002ce57806002600082825403925050819055506200031b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200037a919062000802565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040957607f821691505b6020821081036200041f576200041e620003c1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200044a565b6200049586836200044a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004e2620004dc620004d684620004ad565b620004b7565b620004ad565b9050919050565b6000819050919050565b620004fe83620004c1565b620005166200050d82620004e9565b84845462000457565b825550505050565b600090565b6200052d6200051e565b6200053a818484620004f3565b505050565b5b8181101562000562576200055660008262000523565b60018101905062000540565b5050565b601f821115620005b1576200057b8162000425565b62000586846200043a565b8101602085101562000596578190505b620005ae620005a5856200043a565b8301826200053f565b50505b505050565b600082821c905092915050565b6000620005d660001984600802620005b6565b1980831691505092915050565b6000620005f18383620005c3565b9150826002028217905092915050565b6200060c8262000387565b67ffffffffffffffff81111562000628576200062762000392565b5b620006348254620003f0565b6200064182828562000566565b600060209050601f83116001811462000679576000841562000664578287015190505b620006708582620005e3565b865550620006e0565b601f198416620006898662000425565b60005b82811015620006b3578489015182556001820191506020850194506020810190506200068c565b86831015620006d35784890151620006cf601f891682620005c3565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200071582620006e8565b9050919050565b620007278162000708565b82525050565b60006020820190506200074460008301846200071c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200078682620004ad565b91506200079383620004ad565b9250828201905080821115620007ae57620007ad6200074a565b5b92915050565b620007bf81620004ad565b82525050565b6000606082019050620007dc60008301866200071c565b620007eb6020830185620007b4565b620007fa6040830184620007b4565b949350505050565b6000602082019050620008196000830184620007b4565b92915050565b610fef806200082f6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461016857806342966c681461018457806370a08231146101a057806395d89b41146101d0578063a9059cbb146101ee578063dd62ed3e1461021e576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b661024e565b6040516100c39190610c16565b60405180910390f35b6100e660048036038101906100e19190610cd1565b6102e0565b6040516100f39190610d2c565b60405180910390f35b610104610303565b6040516101119190610d56565b60405180910390f35b610134600480360381019061012f9190610d71565b61030d565b6040516101419190610d2c565b60405180910390f35b61015261033c565b60405161015f9190610de0565b60405180910390f35b610182600480360381019061017d9190610cd1565b610345565b005b61019e60048036038101906101999190610dfb565b610353565b005b6101ba60048036038101906101b59190610e28565b610360565b6040516101c79190610d56565b60405180910390f35b6101d86103a8565b6040516101e59190610c16565b60405180910390f35b61020860048036038101906102039190610cd1565b61043a565b6040516102159190610d2c565b60405180910390f35b61023860048036038101906102339190610e55565b61045d565b6040516102459190610d56565b60405180910390f35b60606003805461025d90610ec4565b80601f016020809104026020016040519081016040528092919081815260200182805461028990610ec4565b80156102d65780601f106102ab576101008083540402835291602001916102d6565b820191906000526020600020905b8154815290600101906020018083116102b957829003601f168201915b5050505050905090565b6000806102eb6104e4565b90506102f88185856104ec565b600191505092915050565b6000600254905090565b6000806103186104e4565b90506103258582856104fe565b610330858585610592565b60019150509392505050565b60006012905090565b61034f8282610686565b5050565b61035d3382610708565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103b790610ec4565b80601f01602080910402602001604051908101604052809291908181526020018280546103e390610ec4565b80156104305780601f1061040557610100808354040283529160200191610430565b820191906000526020600020905b81548152906001019060200180831161041357829003601f168201915b5050505050905090565b6000806104456104e4565b9050610452818585610592565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6104f9838383600161078a565b505050565b600061050a848461045d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461058c578181101561057c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161057393929190610f04565b60405180910390fd5b61058b8484848403600061078a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106045760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105fb9190610f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106765760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161066d9190610f3b565b60405180910390fd5b610681838383610961565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106f85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106ef9190610f3b565b60405180910390fd5b61070460008383610961565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077a5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107719190610f3b565b60405180910390fd5b61078682600083610961565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107fc5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107f39190610f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361086e5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108659190610f3b565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561095b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109529190610d56565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b35780600260008282546109a79190610f85565b92505081905550610a86565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a3f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a3693929190610f04565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610acf5780600260008282540392505081905550610b1c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b799190610d56565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610bc0578082015181840152602081019050610ba5565b60008484015250505050565b6000601f19601f8301169050919050565b6000610be882610b86565b610bf28185610b91565b9350610c02818560208601610ba2565b610c0b81610bcc565b840191505092915050565b60006020820190508181036000830152610c308184610bdd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c6882610c3d565b9050919050565b610c7881610c5d565b8114610c8357600080fd5b50565b600081359050610c9581610c6f565b92915050565b6000819050919050565b610cae81610c9b565b8114610cb957600080fd5b50565b600081359050610ccb81610ca5565b92915050565b60008060408385031215610ce857610ce7610c38565b5b6000610cf685828601610c86565b9250506020610d0785828601610cbc565b9150509250929050565b60008115159050919050565b610d2681610d11565b82525050565b6000602082019050610d416000830184610d1d565b92915050565b610d5081610c9b565b82525050565b6000602082019050610d6b6000830184610d47565b92915050565b600080600060608486031215610d8a57610d89610c38565b5b6000610d9886828701610c86565b9350506020610da986828701610c86565b9250506040610dba86828701610cbc565b9150509250925092565b600060ff82169050919050565b610dda81610dc4565b82525050565b6000602082019050610df56000830184610dd1565b92915050565b600060208284031215610e1157610e10610c38565b5b6000610e1f84828501610cbc565b91505092915050565b600060208284031215610e3e57610e3d610c38565b5b6000610e4c84828501610c86565b91505092915050565b60008060408385031215610e6c57610e6b610c38565b5b6000610e7a85828601610c86565b9250506020610e8b85828601610c86565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610edc57607f821691505b602082108103610eef57610eee610e95565b5b50919050565b610efe81610c5d565b82525050565b6000606082019050610f196000830186610ef5565b610f266020830185610d47565b610f336040830184610d47565b949350505050565b6000602082019050610f506000830184610ef5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f9082610c9b565b9150610f9b83610c9b565b9250828201905080821115610fb357610fb2610f56565b5b9291505056fea2646970667358221220da963970c8131fc188b5a364f9d250d09d272fd1f67b593ce28a02f153fc942064736f6c63430008180033